home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Misc / Cookie / Source / PreferencesController.m < prev    next >
Encoding:
Text File  |  1995-06-12  |  6.3 KB  |  333 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import <streams/streams.h>
  5. #import "PreferencesController.h"
  6. #import "CookieFile.h"
  7. #import <sys/types.h>
  8. #include <sys/stat.h>
  9. #import <sys/dir.h>
  10. #import <sys/param.h>
  11. #import <defaults.h>
  12. #import "CookieFileListView.h"
  13. #import "CookieController.h"
  14.  
  15.  
  16. extern NXDefaultsVector mydefaults;
  17.  
  18. @implementation PreferencesController
  19.  
  20. - setSeconds :(int)secs
  21. {
  22.     char string[32],temp[32];
  23.  
  24.     seconds = secs;
  25.  
  26.     string[0] = 0;
  27.     switch((secs/60))
  28.     {
  29.         case 0    :    break;
  30.  
  31.         case 1    :    strcpy(string,"1 min ");
  32.                     break;
  33.  
  34.         default    :    sprintf(string,"%d mins ",secs/60);
  35.                     break;
  36.     }
  37.  
  38.     switch((secs%60))
  39.     {
  40.         case 0    :    break;
  41.  
  42.         case 1    :    strcat(string,"1 sec");
  43.                     break;
  44.  
  45.         default    :    sprintf(temp,"%d secs",secs%60);
  46.                     strcat(string,temp);
  47.                     break;
  48.     }
  49.  
  50.     if(secs == 0)
  51.         strcpy(string,"no secs");
  52.  
  53.     [timeDisplay setStringValue:string];
  54.     [timeDisplay display];
  55.  
  56.     return self;
  57. }
  58.  
  59. - revert:sender
  60. {
  61.     [NXApp stopModal];
  62.     [prefPanel orderOut:self];
  63.  
  64.     return self;
  65. }
  66.  
  67. - switchTimer:sender
  68. {
  69.     flags ^= PREF_TIMER;
  70.  
  71.     return self;
  72. }
  73.  
  74. - ok:sender
  75. {
  76.     NXStream *stream;
  77.     char mypath[MAXPATHLEN];
  78.     int count;
  79.     NXRect myRect;
  80.  
  81.     sprintf(mypath,"%s/.Cookie_Defaults",getenv("HOME"));
  82.     stream = NXOpenMemory(NULL,0,NX_READWRITE);
  83.     if(!stream)
  84.         return 0;
  85.  
  86.     for(count = 0; count < [((List *)cookieList) count]; count++)
  87.     {
  88.         CookieFile *cookieFile;
  89.         int length;
  90.         char myflags = 0;
  91.  
  92.         cookieFile = [cookieList objectAt:count];
  93.         if([[[((CookieFileListView *)fileList) matrix] cellAt:count:0]  state])
  94.              [cookieFile setSelected:TRUE];
  95.         else
  96.             [cookieFile setSelected:FALSE];
  97.  
  98.         length = strlen([cookieFile filename])+1;
  99.         NXWrite(stream,(char *)&length,sizeof(int));
  100.         NXWrite(stream,[cookieFile filename],length);
  101.  
  102.         if([cookieFile selected])
  103.             myflags = TRUE;
  104.         NXWrite(stream,(char *)&myflags,1);
  105.     }
  106.  
  107.     if(NXSaveToFile(stream,mypath))
  108.         {
  109.         NXCloseMemory(stream,NX_FREEBUFFER);
  110.         return 0;
  111.         }
  112.  
  113.     NXCloseMemory(stream,NX_FREEBUFFER);
  114.  
  115.     if(flags&PREF_DEAD)
  116.         NXWriteDefault([NXApp appName],"Status","DEAD");
  117.     else
  118.         NXWriteDefault([NXApp appName],"Status","ALIVE");
  119.  
  120.     if(flags&PREF_TIMER)
  121.         NXWriteDefault([NXApp appName],"Timer","YES");
  122.     else
  123.         NXWriteDefault([NXApp appName],"Timer","NO");
  124.  
  125.     sprintf(mypath,"%d",seconds);
  126.     NXWriteDefault([NXApp appName],"Seconds",mypath);
  127.  
  128.     myRect = [cookieController getWindowRect];
  129.     sprintf(mypath,"%.0f %.0f %.0f %.0f",myRect.origin.x,myRect.origin.y,myRect.size.width,
  130.         myRect.size.height);
  131.     NXWriteDefault([NXApp appName],"MainFrame",mypath);
  132.  
  133.     NXWriteDefault([NXApp appName],"NXFont",[cookieController fontname]);
  134.  
  135.     myRect.origin.x = [((CookieController *)cookieController) fontsize];
  136.     sprintf(mypath,"%.0f",myRect.origin.x);
  137.     NXWriteDefault([NXApp appName],"NXFontSize",mypath);
  138.  
  139.     [NXApp stopModal];
  140.     [prefPanel orderOut:self];
  141.     [cookieController newPrefs];
  142.  
  143.     return self;
  144. }
  145.  
  146. - changeTimer:sender
  147. {
  148.     float newValue;
  149.  
  150.     newValue = [sender floatValue];
  151.  
  152.     [self setSeconds:((int)newValue)];
  153.  
  154.     return self;
  155. }
  156.  
  157. - startPreferences:sender
  158. {
  159.     [fileList syncView:cookieList];
  160.     if(flags&PREF_TIMER)
  161.         [timerButton setState:FALSE];
  162.     else
  163.         [timerButton setState:TRUE];
  164.     if(flags&PREF_DEAD)
  165.         [statusButton setState:TRUE];
  166.     else
  167.         [statusButton setState:FALSE];
  168.  
  169.     [timerSlider setFloatValue:(float)seconds];
  170.  
  171.     [timerButton display];
  172.     [statusButton display];
  173.     [timerSlider display];
  174.     [self setSeconds:seconds];
  175.  
  176.     [prefPanel makeKeyAndOrderFront:self];
  177.  
  178.     [NXApp runModalFor:prefPanel];
  179.  
  180.     return self;
  181. }
  182.  
  183. - changeStatus:sender
  184. {
  185.     flags ^= PREF_DEAD;
  186.  
  187.     return self;
  188. }
  189.  
  190. - getPreferences
  191. {
  192.     NXStream *stream;
  193.     int entries = 0,dircount;
  194.     struct direct **namelist;
  195.     char mypath[MAXPATHLEN];
  196.  
  197.     [cookieList init];
  198.  
  199.     sprintf(mypath,"%s/Library/Cookies",getenv("HOME"));
  200.  
  201.     for(dircount = 0; dircount < 2; dircount++)
  202.     {
  203.         // Try resource in users home directory, then system wide one.
  204.         switch(dircount)
  205.         {
  206.             case 0    :
  207.                 entries = scandir(mypath, &namelist,NULL,NULL);
  208.                 break;
  209.  
  210.             case 1    :
  211.                 entries = scandir("/LocalLibrary/Cookies",&namelist,NULL,NULL);
  212.                 break;
  213.         }
  214.  
  215.         if(entries > 0)
  216.         {
  217.             int count;
  218.  
  219.             for(count = 0; count < entries; count++)
  220.                 {
  221.                     CookieFile *cookieFile;
  222.  
  223.                     // Skip over this filename if it starts with a dot
  224.                     if(namelist[count]->d_name[0] == '.')
  225.                         continue;
  226.  
  227.                     // Must be a cookie file them, make a cookie file for it
  228.                     cookieFile = [CookieFile alloc];
  229.                     if([cookieFile initFromName:namelist[count]->d_name fromList:cookieList])
  230.                     {
  231.                         struct stat my_stat;
  232.                         char filepath[MAXPATHLEN];
  233.  
  234.                         switch(dircount)
  235.                         {
  236.                             case 0    :
  237.                                 sprintf(filepath,"%s/%s",mypath,namelist[count]->d_name);
  238.                                 break;
  239.  
  240.                             case 1    :
  241.                                 sprintf(filepath,"%s/%s","/LocalLibrary/Cookies",
  242.                                     namelist[count]->d_name);
  243.                                 break;
  244.                         }
  245.                         stat(filepath,&my_stat);
  246.  
  247.                         [cookieFile setFilelength:my_stat.st_size];
  248.                         [cookieList addObject:cookieFile];
  249.                     }
  250.                     else
  251.                         [cookieFile free];
  252.                 }
  253.             // Free all the entries and the list itself
  254.             for(count = 0; count < entries; count++)
  255.                 free((char *)namelist[count]);
  256.             free((char *)namelist);
  257.         }
  258.     }
  259.  
  260.     sprintf(mypath,"%s/.Cookie_Defaults",getenv("HOME"));
  261.     stream = NXMapFile(mypath, NX_READONLY);
  262.     if(stream)
  263.     {
  264.         int count;
  265.         char name[MAXPATHLEN];
  266.  
  267.         while(NXRead(stream,(char *)&count,sizeof(int)) == sizeof(int))
  268.         {
  269.             unsigned char myflags;
  270.             CookieFile *cookieFile;
  271.  
  272.             NXRead(stream,name,count);
  273.             NXRead(stream,(char *)&myflags,1);
  274.  
  275.             cookieFile = [CookieFile findName :name fromList:cookieList];
  276.             if(cookieFile)
  277.             {
  278.                 if(myflags)
  279.                     [cookieFile setSelected:TRUE];
  280.                 else
  281.                     [cookieFile setSelected:FALSE];
  282.             }
  283.         }
  284.  
  285.         NXCloseMemory(stream, NX_FREEBUFFER);
  286.     }
  287.  
  288.     if(!strcasecmp(NXGetDefaultValue([NXApp appName],"Status"),"ALIVE"))
  289.         flags = 0;
  290.     else
  291.         flags = PREF_DEAD;
  292.  
  293.     if(!strcasecmp(NXGetDefaultValue([NXApp appName],"Timer"),"YES"))
  294.         flags |= PREF_TIMER;
  295.  
  296.     sscanf(NXGetDefaultValue([NXApp appName],"Seconds"),"%d",&seconds);
  297.     [cookieController newPrefs];
  298.  
  299.     return self;
  300. }
  301.  
  302. - (int)seconds
  303. {
  304.     return seconds;
  305. }
  306.  
  307. - (char)flags
  308. {
  309.     return flags;
  310. }
  311.  
  312. - (const char *)fontname
  313. {
  314.     return NXGetDefaultValue([NXApp appName],"NXFont");
  315. }
  316.  
  317. - (int)fontsize
  318. {
  319.     return atoi(NXGetDefaultValue([NXApp appName],"NXFontSize"));
  320. }
  321.  
  322. - (NXRect)windowframe
  323. {
  324.     NXRect myRect;
  325.  
  326.     sscanf(NXGetDefaultValue([NXApp appName],"MainFrame"),"%f %f %f %f",
  327.         &myRect.origin.x,&myRect.origin.y,&myRect.size.width,&myRect.size.height);
  328.  
  329.     return myRect;
  330. }
  331.  
  332. @end
  333.